汎用プログラミング言語でKubernetesのYAMLを生成するcdk8sが発表されました!
「TypeScriptでKubernetesのYAMLを生成できるよ!そうcdk8sならね」
というわけで、先日AWSより突然、cdk8sなるものが発表されました。
正直最初これを見たときの第一印象は「なんて安易なネーミングなんや…」でしたが、見れば見るほど、KubernetesのYAMLをそのまま管理する辛さに対しての別次元のアプローチとして、すごい斬新で期待感が持てたので、意気揚々とブログを書いております。この記事では、cdk8sの特徴とそれが解決してくれること、および関連リソースをまとめてます。ぜひ、その可能性を感じ取っていただきつつ、Getting Started試していただければ。
我々はYAML地獄から解き放たれるのか…!! ( ゚д゚) ガタッ / ヾ __L| / ̄ ̄ ̄/_ \/ /
はてさて、どうでしょう。
cdk8sとは
公式紹介ブログはこちら。
Introducing CDK for Kubernetes | Containers
cdk8sで出来ることを単純に定義すると、以下の図に集約されます。シンプル!
以下、公式ブログの内容を紐解きながら、自分の理解をざっくり書いていきます。
Kubernetesの運用におけるYAMLの課題
Kubernetesの大きな特徴として、統一的なYAMLによるインフラの管理が挙げられます。Infrastructure as Codeの文脈で語られることも多いですが、YAMLファイルを定義してそれをクラスタにapplyすることで、コードベースでインフラ(Kubernetesクラスタ)全体を統一的に管理できます。
冪等性を持った構造化テキストファイルを元にクラスタ全体を管理することが出来るので、クラスタ運用のパイプライン実装による自動化が容易であったり、開発チームへのインフラ操作権限委譲がやりやすいなど多くのメリットがあります。
ただ、本格的にクラスタを運用していくと多数のYAMLファイルを定義し管理する必要があり、アプリケーションの成長に伴い加速度的にYAMLファイル自体の管理や他者へのスキルトランスファーが難しくなっていくという問題がありました。そもそも、YAMLは優れた構造化フォーマットですが、ロジックや再利用可能な表現をするための機能を持っていません。
cdk8sが解決してくれること
これらの問題について、既にAWSのインフラを構築するためにAWSがリリースし開発している、AWS Cloud Developmnet Kit(AWS CDK)が利用できることに気づきました。
CDK for Kubernetes(cdk8s)は、TypeScriptやPythonなどのプログラミング言語でKubernetesのYAMLを生成できます。
いろんなクラスターで動く
cdk8sの責任範囲はYAMLの生成までなので、AWSが提供しているEKSだけではなく、オンプレミスや他のパブリッククラウドなど、全てのKubernetesクラスターが適用対象となります。汎用的なプログラミング言語をベースとなっているため従来のIDEやツールを利用可能で、YAMLを直接管理〜運用するより、より高次元のレベルでKubernetesクラスタを管理することができます。
命令的言語からの宣言的状態へのアプローチ
cdk8sは命令的言語を使って書かれていますが、出力されるYAMLは宣言的なものです。つまりは、従来からある宣言的アプローチによる堅牢性を維持したまま、命令的表現によるプログラミング言語ならではのアプローチを楽しむことができます。
任意のKubernetes APIのバージョンとCRD(カスタムリソース)を利用可能
cdk8sは、出力するYAMLのKubernetesクラスターバージョンを指定する方法があります。また、カスタムリソース定義をインポートすることも可能です。
複数言語のサポート
TypeScript、JavaScript、Pythonに対応しています。将来的にはGo言語のサポートもロードマップに含まれます。
cdk8s関連各種リソース
その他全体的な特徴は、上で紹介したAWSブログを見てもらえればと思いますが、その他のcdk8s関連リソースをまとめます。
公式ページ
Contributors and maintainers are governed by the CNCF Code of Conduct
cdk8sの公式トップページです。ツールの概要と各種リソースへのリンクがあります。公式ページみてて思ったのは、ページ最下部に以下の記述があったこと。
Contributors and maintainers are governed by the CNCF Code of Conduct
ということで、CNCFのCoCに基づいて運用されるということですね。現在、awslabsに格納されているツール群の中でこれは珍しいと思います。
GitHub
awslabs/cdk8s: Define Kubernetes native apps and abstractions using object-oriented programming
1番メインとなるページ。Getting Startedや、ロードマップなども全てここで管理されてます。
Getting Started
なにはなくとも手で動かさないとわかんないぜ!という方も多いですよね。現在、TypeScriptとPython用のGetting Startedが用意されています。
- TypeScript
- Python
TypeScriptでちょっと試してみましたが、Kubernetes界隈のリソースをコード補完しながら定義していける感覚は、超新鮮!よござんすな。
Roadmap
ロードマップもGitHub上で公開されています。Import Helm Chartsなんてのもアガってますね。
cdk8s cli
cdk8s/README.md at v0.21.0 · awslabs/cdk8s
Library
とっかかりに良いWebinar
CNCF Member Webinar: End YAML engineering with cdk8s! - Cloud Native Computing Foundation
先日、CNCFのWebinarで、cdk8sが紹介されていました。自分も一通り見てたのですが、cdk8sが解決しようとしていること、実際のライブコーディングによるデモやQ&Aなども全て収録されているので参考になると思います。
cdk8sはKubernetesYAML管理のデファクトスタンダードになるか
もともとKubernetesのマニフェストファイルについては、その管理ツールとして様々な手段が提供されていました(kustomize, jsonnet, jkcfg, kubecfg, kubegen, Pulume)。
cdk8sは、最近AWSインフラの定義において非常に存在感を増しているAWS CDKの思想が元になっているのが大きな特徴と言えます。最近ウチのチームでも、主にサーバーレス周辺のリソースでは、CDKを使ってインフラをコード化し管理することがデフォルトになりつつあります。
まだ、αリリースの段階ではありますが、AWS CDKなみの盛り上がりを見せてくると、次代のKubernetesのYAML管理のデファクトスタンダードになり得る可能性も秘めていると思っています。今後の展開に注目ですな。
それでは、今日はこのへんで。濱田(@hamako9999)でした。